
/*****************************************************************************/
/*                        >>> func_config.c <<<                              */
/*	Trabajo Practico 2do. cuatrimestre 2011                                  */
/*	TP:"FUSELAJE"                                                            */
/*	GRUPO: Reduce Fat Fast                                                   */
/*	INTEGRANTES: Emanuel Genovese                                            */
/*               Federico Gabriel Garcia                                     */
/*               Federico Pioli                                              */
/*               Esther Insfrain                                             */
/*               Luciano Bagattin                                            */
/*	Fecha UM:                                                                */
/*****************************************************************************/
/*****************************************************************************/
/*		        	Include		                                             */
/*****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "../headers/structsPFS.h"
#include "../headers/func_config.h"
#include "../headers/constantes.h"
#include "log.h"
#include "string.h"

/*****************************************************************************/
/*		        	Define		                                             */
/*****************************************************************************/

/******************************************************************************/
/* Nombre de Funcion: ifCargaArchivo                                          */
/* Parametros: puntero: cmrMatriz de lineas de arch config                    */
/*																			  */
/*	                                                                          */
/* Descripcion: Funcion que levanta los datos del archivo de configuracion    */
/******************************************************************************/

int ifCargaArchivo(char cmrMatriz [][80+2])
{
    FILE * pstArchi;
    int iFila,iLong;
    char szLinea[80+2];


	iFila=0;
	if ((pstArchi = fopen(PFS_CONFIG,"rt"))==NULL)
	    return 1;

	while((fgets(szLinea, 80, pstArchi))!=NULL)
	{
	    iLong=strlen(szLinea);
	    if(szLinea[iLong-1]=='\n')
		szLinea[iLong-1]='\0';

	    if(szLinea[0] != '#')
	    {
		bzero(cmrMatriz[iFila],82);
		strncpy(cmrMatriz[iFila],szLinea,strlen(szLinea));
		cmrMatriz[iFila][strlen(cmrMatriz[iFila])]='\0';
		iFila++;
	    }
	}
	fclose(pstArchi);
	return EXIT_SUCCESS;
}//fin del fCargaConfig

/******************************************************************************/
/* Nombre de Funcion: pLoadConfig                                             */
/* Parametros: puntero: Recibe una cierta cadena de parametros                */
/*																			  */
/*	                                                                          */
/* Descripcion: Funcion que levanta los datos del archivo de configuracion    */
/******************************************************************************/

int fLoadConfig( datosConfigPPD  *stInfoConfig, t_log * log){



	 char cmConfig[13][80+2];





	 if (ifCargaArchivo(cmConfig)){
	  	log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo abrir el archivo");

		return 1;
	 }//fin del fCargaConfig
	 log_info(log, SNOMBREPROCESO, "Message info: %s", "El archivo de configuracion se abrio con exito");




      //asignacion de IpLocal
	 if (strlen(cmConfig[0]) == 0){
	   	printf ("No se pudo obtener los datos del archivo\n\n");
	  	log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo obtener la IpLocal");

		return 1;
	 }

	 strcpy(stInfoConfig->sIpLocal,cmConfig[0]);

	 log_info(log, SNOMBREPROCESO, "Message info: %s", "Se obtuvo con exito la Ip Local");


	  //asignacion PuertoLocal
	 if (strlen (cmConfig[1]) == 0){
		printf ("No se pudo obtener los datos del archivo\n\n");
		log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo obtener el Puerto local");
		return 1;
     }
	 stInfoConfig->iPuertoLocal=atoi(cmConfig[1]);
	 log_info(log, SNOMBREPROCESO, "Message info: %s", "Se obtuvo con exito la Puerto Local");

	 //asignacion IP de conexion al proceso.

	  if (strlen(cmConfig[2])==0){
	   printf ("No se pudo obtener los datos del archivo\n\n");
	   log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo obtener la Ip de conexion a otro proceso");
	    return 1;
	 }

	 strcpy(stInfoConfig->sIPConex,cmConfig[2]);
	 log_info(log, SNOMBREPROCESO, "Message info: %s", "Se pudo obtener la Ip de conexion a otro proceso");

	 //asignacion Puerto de conexion del proceso.
	 if (strlen(cmConfig[3]) == 0){
		printf ("No se pudo obtener los datos del archivo\n\n");
		log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo obtener el Puerto de conexion a otro proceso");

		return 1;
	 }
	 stInfoConfig->iPuertoConex=atoi(cmConfig[3]);
	 log_info(log, SNOMBREPROCESO, "Message info: %s", "Se obtuvo con exito el Puerto de conexion a otro proceso");



     	 //cargo el tamaño de la cache.
     	 if (strlen(cmConfig[4]) == 0){
     		printf ("No se pudo obtener los datos del archivo\n\n");
     		log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo obtener el tamaño de la cache");
     		return 1;
     	 }
     	 stInfoConfig->iTamCache=atoi(cmConfig[5]);

     	 log_info(log, SNOMBREPROCESO, "Message info: %s", "Se obtuvo con exito el tamaño de la cache");


      //cargo el tamaño de la cache.
     if (strlen(cmConfig[5]) == 0){
        printf ("No se pudo obtener los datos del archivo\n\n");
        log_error(log, SNOMBREPROCESO, "Message error: %s", "No se pudo obtener la cantidad maxima de conexiones");
        return 1;
     }
     stInfoConfig->iCantMaxConex=atoi(cmConfig[6]);

     log_info(log, SNOMBREPROCESO, "Message info: %s", "Se obtuvo con exito la cantidad maxima de conexiones");


	 log_info(log, SNOMBREPROCESO, "Message info: %s", "El archivo de Config. se cerro exitosamente");


  return EXIT_SUCCESS;

}//fin del pLoadConfig
